{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "52df4abf",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "624a2176",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#测试算法\n",
    "x = 10\n",
    "def algorithm(x):\n",
    "    left = 0\n",
    "    right = x\n",
    "    while left <= right:\n",
    "        middle = left+(right - left)//2\n",
    "        if middle**2 <= x:\n",
    "            ans =  middle\n",
    "            left = middle + 1\n",
    "        else:\n",
    "            right = middle - 1\n",
    "    return ans\n",
    "algorithm(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "690816e8",
   "metadata": {},
   "outputs": [],
   "source": [
    "#加入记录的算法\n",
    "def record_algorithm(x):\n",
    "        left = 0\n",
    "        right = x\n",
    "        steps = []  \n",
    "        while left <= right:\n",
    "            steps.append((left, right))\n",
    "            middle = left + (right - left) // 2\n",
    "            if middle ** 2 <= x:      #取值处带等号\n",
    "                ans = middle\n",
    "                left = middle + 1     #右边界在left取值    vs   左边界在right取值\n",
    "            else:\n",
    "                right = middle - 1\n",
    "        return ans, steps"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "48ccde09",
   "metadata": {},
   "outputs": [],
   "source": [
    "def visualize_algorithm(x, algorithm):\n",
    "    #算法过程数据\n",
    "    result, steps = record_algorithm(x)\n",
    "    print(steps)\n",
    "    #可视化\n",
    "    fig, ax = plt.subplots()\n",
    "    ax.set_title(f\"Bisection Algorithm Visualization for x = {x}\")\n",
    "    ax.set_xlabel(\"Number Line\")\n",
    "    ax.set_ylabel(\"Steps\")\n",
    "    ax.set_xlim(0, x)\n",
    "    ax.set_ylim(0, len(steps))\n",
    "    ax.grid(True)\n",
    "\n",
    "    #画每一步\n",
    "    for i, (left, right) in enumerate(steps):\n",
    "        ax.plot([left, right], [i, i], marker='o')\n",
    "        \n",
    "    #添加结果注释\n",
    "    ax.annotate(f'Result: {result}', xy=(result, len(steps)-1), xytext=(result+2, len(steps)-1),)\n",
    "\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3845895d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[(0, 50), (0, 24), (0, 11), (6, 11), (6, 7), (7, 7)]\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABGU0lEQVR4nO3deVxU9f7H8fewjSIiLojihpq5Ju5eLVNcw6wsyzL7idbNSqzM2yL9birWFbVu1zS3FsUss7TM9KZJuVsWoaRmmnrdUpREwQUDhO/vD3/MdQQVAZk5+Ho+HvPQ+Z7vnPOZ8+UM7zkbNmOMEQAAgAV5uLoAAACAwiLIAAAAyyLIAAAAyyLIAAAAyyLIAAAAyyLIAAAAyyLIAAAAyyLIAAAAyyLIAAAAyyLIQDabTWPHjnV1Gfnq0qWLunTp4uoyriokJESDBw922fKvZT116dJFzZo1u74FFZPBgwcrJCTE1WXkW4erthtXbq8rVqxQixYtVKZMGdlsNqWmprqkDuBiBJlSKDY2VjabzelRtWpVhYWFafny5a4uL48dO3Zo7Nix2r9/v6tLyddXX30lm82m4OBg5eTkuLqcAjly5IjGjh2rxMREV5fikJWVpSpVqui22267bB9jjGrVqqVWrVqVYGXu56uvvnK7LxcpKSnq37+/ypYtq2nTpmnevHkqV66cq8sqEZd+nuY+JkyYkKfv4cOH1b9/fwUEBMjf31/33HOP/vOf/7ig6huHl6sLwPUzbtw41a1bV8YYHTt2TLGxserdu7eWLl2qPn36OPqdO3dOXl6u+1HYsWOHoqOj1aVLlzzfeleuXOmaoi7y0UcfKSQkRPv379eqVavUvXt3V5eUx6Xr6ciRI4qOjlZISIhatGjhmqIu4e3trQceeECzZs3SgQMHVKdOnTx91q1bp99//13PPfecJOndd9912/B4Pbebr776StOmTcs3zLhqe42Pj9fp06f16quvuuU2cL316NFDgwYNcmpr2bKl0/MzZ84oLCxMaWlpevnll+Xt7a1//etf6ty5sxITE1W5cuWSLPmGQZApxcLDw9WmTRvH88cee0xBQUH6+OOPnYJMmTJlXFFegfj4+Lh0+WfPntWSJUsUExOjOXPm6KOPPnKrD/H09HT5+vq6fD0V1MCBAzVz5kx9/PHHGjVqVJ7p8+fPl4eHhx566CFJF8KPu3LVduOq5SYnJ0uSAgICim2eZ8+etcxenZtvvlmPPPLIFftMnz5du3fv1o8//qi2bdtKuvA53KxZM/3zn//U+PHjS6LUGw6Hlm4gAQEBKlu2bJ5vc5cecz99+rRGjBihkJAQ2e12Va1aVT169NDmzZudXvfDDz/ojjvuUIUKFeTr66vOnTtr48aNeZZ7+PBhPfbYYwoODpbdblfdunX11FNPKTMzU7GxsXrggQckSWFhYY5dtmvWrJGU/7kfycnJjlBWpkwZhYaGau7cuU599u/fL5vNpjfeeEPvvPOO6tevL7vdrrZt2yo+Pr7A62zx4sU6d+6cHnjgAT300EP6/PPP9eeffxbotVu3blXnzp1VtmxZ1axZU6+99prmzJkjm82W5zDa9OnT1bRpU9ntdgUHBysyMjLP+Qe557YkJCTo9ttvl6+vr15++eU862nNmjWOD9EhQ4Y41mlsbKzT/Hbs2KGwsDD5+vqqRo0amjRpktP0NWvWyGaz6dNPP1V0dLRq1Kih8uXL6/7771daWpoyMjI0YsQIVa1aVX5+fhoyZIgyMjKuuE5uvfVWhYSEaP78+XmmZWVladGiRQoLC1NwcLCk/M9NWbBggVq3bq3y5cvL399ft9xyi9566y3H9LFjx8pms+WZf+4h14vX/ZIlS3TnnXc6fjbr16+vV199VdnZ2Vd8H5LzdpP783a5R67169frgQceUO3atWW321WrVi0999xzOnfunKPP4MGDNW3aNMcyLp1HfufIbNmyReHh4fL395efn5+6deumTZs25fv+N27cqJEjRyowMFDlypXTvffeqz/++OOK77VLly6KiIiQJLVt21Y2m83pnLCFCxeqdevWKlu2rKpUqaJHHnlEhw8fdprH4MGD5efnp71796p3794qX768Bg4cmO/yzp07p0aNGqlRo0ZO6+bEiROqXr26OnbsWKAxKm7nzp274va/aNEitW3b1rH9SVKjRo3UrVs3ffrppyVR4g2JPTKlWFpamo4fPy5jjJKTkzV16lSdOXPmqt8qnnzySS1atEjDhw9XkyZNlJKSog0bNujXX391nLuwatUqhYeHq3Xr1hozZow8PDw0Z84cde3aVevXr1e7du0kXTjE0a5dO6Wmpmro0KFq1KiRDh8+rEWLFik9PV233367nnnmGU2ZMkUvv/yyGjduLEmOfy917tw5denSRXv27NHw4cNVt25dLVy4UIMHD1ZqaqqeffZZp/7z58/X6dOn9cQTT8hms2nSpEm677779J///KdA3/Y/+ugjhYWFqVq1anrooYc0atQoLV261BG+Lufw4cOOYBYVFaVy5crpvffek91uz9N37Nixio6OVvfu3fXUU09p165dmjFjhuLj47Vx40anOlNSUhQeHq6HHnpIjzzyiIKCgvLMr3Hjxho3bpxGjx6toUOHqlOnTpKkjh07OvqcPHlSd9xxh+677z71799fixYt0ksvvaRbbrlF4eHhTvOLiYlR2bJlNWrUKO3Zs0dTp06Vt7e3PDw8dPLkSY0dO1abNm1SbGys6tatq9GjR192vdhsNj388MMaP368fvnlFzVt2tQxbcWKFTpx4sRlf7lJUlxcnAYMGKBu3bpp4sSJkqRff/1VGzduzDP2BREbGys/Pz+NHDlSfn5+WrVqlUaPHq1Tp07p9ddfL/B8AgMDNW/ePKe2rKwsPffcc057yxYuXKj09HQ99dRTqly5sn788UdNnTpVv//+uxYuXChJeuKJJ3TkyBHFxcXlmWd+fvnlF3Xq1En+/v568cUX5e3trVmzZqlLly5au3at2rdv79T/6aefVsWKFTVmzBjt379fkydP1vDhw/XJJ59cdhn/+7//q4YNG+qdd95xHLKuX7++Yx0OGTJEbdu2VUxMjI4dO6a33npLGzdu1JYtW5z24Jw/f169evXSbbfdpjfeeEO+vr75Lq9s2bKaO3eubr31Vv3v//6v3nzzTUlSZGSk0tLSFBsbK09Pz8vWm5OToxMnTlx13UlShQoVCvRZEBsbq+nTp8sYo8aNG+vvf/+7Hn74Yadlbt26VY8++mie17Zr104rV67U6dOnVb58+QLVhWtgUOrMmTPHSMrzsNvtJjY2Nk9/SWbMmDGO5xUqVDCRkZGXnX9OTo5p0KCB6dWrl8nJyXG0p6enm7p165oePXo42gYNGmQ8PDxMfHx8vvMxxpiFCxcaSWb16tV5+nTu3Nl07tzZ8Xzy5MlGkvnwww8dbZmZmaZDhw7Gz8/PnDp1yhhjzL59+4wkU7lyZXPixAlH3yVLlhhJZunSpZd9f7mOHTtmvLy8zLvvvuto69ixo7nnnnvy9K1Tp46JiIhwPH/66aeNzWYzW7ZscbSlpKSYSpUqGUlm3759xhhjkpOTjY+Pj+nZs6fJzs529H377beNJDN79myndSHJzJw586rrKT4+3kgyc+bMybevJPPBBx842jIyMky1atVMv379HG2rV682kkyzZs1MZmamo33AgAHGZrOZ8PBwp/l26NDB1KlTJ8/yLvXLL78YSSYqKsqp/aGHHjJlypQxaWlpjraIiAineT777LPG39/fnD9//rLzHzNmjMnvoy13u8hd98Zc+Jm91BNPPGF8fX3Nn3/+edk6jMm73Vxq2LBhxtPT06xateqKy4uJiTE2m80cOHDA0RYZGZnve8hvuX379jU+Pj5m7969jrYjR46Y8uXLm9tvv93Rlvv+u3fv7rTdPvfcc8bT09OkpqZe9r1c/PqLt+XMzExTtWpV06xZM3Pu3DlH+7Jly4wkM3r0aEdbRESEkWRGjRp1xeVcLCoqynh4eJh169Y5PicmT5581dflbv8FeeT3uXOpjh07msmTJ5slS5aYGTNmmGbNmhlJZvr06Y4+f/zxh5Fkxo0bl+f106ZNM5LMzp07C/zeUXAcWirFpk2bpri4OMXFxenDDz9UWFiY/vrXv+rzzz+/4usCAgL0ww8/6MiRI/lOT0xM1O7du/Xwww8rJSVFx48f1/Hjx3X27Fl169ZN69atU05OjnJycvTFF1/orrvucjpXJ1d+u/+v5quvvlK1atU0YMAAR5u3t7eeeeYZnTlzRmvXrnXq/+CDD6pixYqO57l7JwpyFcGCBQvk4eGhfv36OdoGDBig5cuX6+TJk1d87YoVK9ShQwenE20rVaqUZ2/DN998o8zMTI0YMUIeHv/dHB9//HH5+/vr3//+t1N/u92uIUOGXLX2q/Hz83PaM+fj46N27drlu14GDRrk9I21ffv2Msbk+ebZvn17HTp0SOfPn7/isps0aaKWLVtqwYIFjrazZ8/qyy+/VJ8+feTv73/Z1wYEBOjs2bOKi4u76nssiLJlyzr+f/r0aR0/flydOnVSenq6du7cWej5fvDBB5o+fbomTZqksLCwfJd39uxZHT9+XB07dpQxRlu2bLnm5WRnZ2vlypXq27ev6tWr52ivXr26Hn74YW3YsEGnTp1yes3QoUOdtr1OnTopOztbBw4cuObl//TTT0pOTtawYcOczt2588471ahRozw/v5L01FNPFXj+Y8eOVdOmTRUREaFhw4apc+fOeuaZZ676umrVqjk++672CA0Nver8cvf43X333XryySeVkJCgZs2a6eWXX3Yc+sr9N7+9rrnr5uLDZCg+HFoqxdq1a+cUIAYMGKCWLVtq+PDh6tOnz2VPEJ00aZIiIiJUq1YttW7dWr1799agQYMcH5S7d++WJMcx8/ykpaUpMzNTp06dKtZ7lhw4cEANGjRw+qUv/fdQ1KUfxrVr13Z6nhtqrhZEJOnDDz9Uu3btlJKSopSUFEkXrlLIzMzUwoULNXTo0CvW2aFDhzztN910U55+ktSwYUOndh8fH9WrVy/P+6lRo0axnNhbs2bNPEGyYsWK2rp1a56+l67DChUqSJJq1aqVpz0nJ0dpaWlXvTpj4MCBev755/Xdd9+pY8eO+uKLL5Senn7Fw0qSNGzYMH366acKDw9XjRo11LNnT/Xv31933HHHFV93Ob/88ov+/ve/a9WqVXl+4aelpRVqnomJiXryySc1YMAAjRw50mnawYMHNXr0aH355Zd5fgYLs7w//vhD6enpeX5+pAvbRE5Ojg4dOuR0CK8o28SlLvfzK104N2TDhg1ObV5eXqpZs2aB5+/j46PZs2erbdu2KlOmjOMcs6spU6bMdT0p38fHR8OHD3eEmttuu80RUvM7Tyz3vJqLgyyKD0HmBuLh4aGwsDC99dZb2r17t9OH28X69++vTp06afHixVq5cqVef/11TZw4UZ9//rnCw8Mdl8O+/vrrl72018/Pr8DHqK+nyx1HN8Zc8XW7d+92nBTcoEGDPNM/+uijKwaZ66W4PgivZb1crm9h1610IVS/+OKLmj9/vjp27Kj58+erYsWK6t279xVfV7VqVSUmJurrr7/W8uXLtXz5cs2ZM0eDBg1ynPB9uV90l54cmpqaqs6dO8vf31/jxo1T/fr1VaZMGW3evFkvvfRSoS77PnnypPr166ebb75Z7733Xp7l9+jRQydOnNBLL72kRo0aqVy5cjp8+LAGDx5cYpeZF2Xcisput+f5EnI1X3/9taQLYWD37t2qW7fuVV+TnZ191ROYc1WqVKlQXw5yg3zu51ylSpVkt9uVlJSUp29uW+5J7CheBJkbTO5u/zNnzlyxX/Xq1TVs2DANGzZMycnJatWqlf7xj38oPDzccZKfv7//Fb/1BAYGyt/fX9u3b7/isq7lEFOdOnW0detW5eTkOH0g5h4GyO/eJIXx0UcfydvbW/Pmzcvzwb9hwwZNmTJFBw8ezPPt9uI69+zZk6f90rbcenft2uV0aCAzM1P79u0r9LfKwhy2K0nBwcEKCwvTwoUL9corryguLk6DBw8u0C8UHx8f3XXXXbrrrruUk5OjYcOGadasWXrllVd00003OfYwpKamOp1oeunerTVr1iglJUWff/65br/9dkf7vn37CvWecnJyNHDgQKWmpuqbb77JcyLrtm3b9Ntvv2nu3LlO9yPJ7zBZQccvMDBQvr6+2rVrV55pO3fulIeHR549Z8Xp4p/frl27Ok3btWtXkbfHrVu3aty4cRoyZIgSExP117/+Vdu2bXPsFbycQ4cOFSjwSNLq1asLdffw3MOwgYGBki58Ubzlllv0008/5en7ww8/qF69epzoe51wjswNJCsrSytXrpSPj89lrwrKzs7Os4u7atWqCg4Oduwybd26terXr6833ngj30CU+03Iw8NDffv21dKlS/PduHO/AebeR6Igtzvv3bu3jh496nSFxfnz5zV16lT5+fmpc+fOV51HQXz00Ufq1KmTHnzwQd1///1OjxdeeEGS9PHHH1/29b169dL333/vdGfdEydO6KOPPnLq1717d/n4+GjKlClO34jff/99paWl6c477yxU/deyTl1l4MCBSk5O1hNPPKGsrKyrHlaS5DjEl8vDw0PNmzeX9N9d+rlBe926dY5+Z8+ezXOJfm5AvXi9Z2Zmavr06YV4N1J0dLS+/vprffzxx/n+Es1vecYYp0vHcxV0/Dw9PdWzZ08tWbLE6bLyY8eOaf78+brtttuueM5RUbVp00ZVq1bVzJkznQ6pLF++XL/++muhf36lC59XgwcPVnBwsN566y3Fxsbq2LFjjpslXklxniOT356d06dPa/LkyapSpYpat27taL///vsVHx/v9Hm3a9curVq16qpXOqLw2CNTii1fvtyxpyI5OVnz58/X7t27NWrUqMt+uJ0+fVo1a9bU/fffr9DQUPn5+embb75RfHy8/vnPf0q68MvjvffeU3h4uJo2baohQ4aoRo0aOnz4sFavXi1/f38tXbpUkjR+/HitXLlSnTt31tChQ9W4cWMlJSVp4cKF2rBhgwICAtSiRQt5enpq4sSJSktLk91uV9euXVW1atU89Q0dOlSzZs3S4MGDlZCQoJCQEC1atEgbN27U5MmTi+Ubzw8//OC4vDs/NWrUUKtWrfTRRx/ppZdeyrfPiy++qA8//FA9evTQ008/7bj8unbt2jpx4oTjG3dgYKCioqIUHR2tO+64Q3fffbd27dql6dOnq23btle9VP5y6tevr4CAAM2cOVPly5dXuXLl1L59+wJ/Sy0J/fr107Bhw7RkyRLVqlXLaa/I5fz1r3/ViRMn1LVrV9WsWVMHDhzQ1KlT1aJFC0c479mzp2rXrq3HHntML7zwgjw9PTV79mwFBgbq4MGDjnl17NhRFStWVEREhJ555hnZbDbNmzevUIdYtm3bpldffVW33367kpOT9eGHHzpNf+SRR9SoUSPVr19fzz//vA4fPix/f3999tln+Z6bkvvL8ZlnnlGvXr3k6enpuEngpV577TXFxcXptttu07Bhw+Tl5aVZs2YpIyMjz72Bipu3t7cmTpyoIUOGqHPnzhowYIDj8uuQkJAChY7Lee2115SYmKhvv/1W5cuXV/PmzTV69Gj9/e9/1/3333/Fw5DFeY7MtGnTHBct1K5dW0lJSZo9e7YOHjyoefPmOe1FHDZsmN59913deeedev755+Xt7a0333xTQUFB+tvf/lYs9SAfrrlYCtdTfpdflylTxrRo0cLMmDHD6dJLY5wv58zIyDAvvPCCCQ0NNeXLlzflypUzoaGhTpcZ5tqyZYu57777TOXKlY3dbjd16tQx/fv3N99++61TvwMHDphBgwaZwMBAY7fbTb169UxkZKTJyMhw9Hn33XdNvXr1jKenp9MlkZdeVmzMhcuihwwZYqpUqWJ8fHzMLbfckucy49zLL19//fU8dV/8fvPz9NNPG0lOl7NeauzYsUaS+fnnn40xeS+/zl0/nTp1Mna73dSsWdPExMSYKVOmGEnm6NGjTn3ffvtt06hRI+Pt7W2CgoLMU089ZU6ePOnUp3PnzqZp06b51pPfelqyZIlp0qSJ8fLycroU+3LzufQS49zLrxcuXOjUL7/LcI3572XPf/zxR7415ueBBx4wksyLL76Y7/RLa1q0aJHp2bOnqVq1qvHx8TG1a9c2TzzxhElKSnJ6XUJCgmnfvr2jz5tvvpnv5dcbN240f/nLX0zZsmVNcHCwefHFF83XX3+d57Lcq11+nbuuLvfItWPHDtO9e3fj5+dnqlSpYh5//HHz888/57lU/vz58+bpp582gYGBxmazOc0jv5/fzZs3m169ehk/Pz/j6+trwsLCzHfffefU53Ljllv71S5DvtzrjTHmk08+MS1btjR2u91UqlTJDBw40Pz+++9OfSIiIky5cuWuuIxcCQkJxsvLyzz99NNO7efPnzdt27Y1wcHBebaP62XlypWmR48eplq1asbb29sEBASYnj175vmcy3Xo0CFz//33G39/f+Pn52f69Oljdu/eXSK13qhsxpTAGV4AJEkjRozQrFmzdObMmSve0AsAUDCcIwNcJ5feMyIlJUXz5s3TbbfdRogBgGLCOTLAddKhQwd16dJFjRs31rFjx/T+++/r1KlTeuWVV1xdGgCUGgQZ4Drp3bu3Fi1apHfeeUc2m02tWrXS+++/X6CTWgEABePyc2QOHz6sl156ScuXL1d6erpuuukmzZkzJ99b2gMAAFzMpXtkTp48qVtvvVVhYWFavny5AgMDtXv3bqe/jQMAAHA5Lt0jM2rUKG3cuFHr1693VQkAAMDCXBpkmjRpol69eun333/X2rVrVaNGDQ0bNkyPP/54vv0zMjKc7h6Zk5OjEydOqHLlym5/S3YAAHCBMUanT59WcHDwNf/9rfxm5jJ2u93Y7XYTFRVlNm/ebGbNmmXKlCljYmNj8+2fe8MtHjx48ODBg4f1H4cOHSpylnDpHhkfHx+1adNG3333naPtmWeeUXx8vL7//vs8/S/dI5OWlqbatWvrt99+U6VKlUqkZuQvKytLq1evVlhYmLy9vV1dzg2P8XAfjIX7YCzcx4kTJ3TzzTcrNTX1qn8E9GpcerJv9erV1aRJE6e2xo0b67PPPsu3v91ul91uz9NeqVIlVa5c+brUiILJysqSr6+vKleuzAeEG2A83Adj4T4YC/dTHKeFuPTOvrfeemuePz//22+/FflPvwMAgBuDS4PMc889p02bNmn8+PHas2eP5s+fr3feeUeRkZGuLAsAAFiES4NM27ZttXjxYn388cdq1qyZXn31VU2ePFkDBw50ZVkAAMAiXP4nCvr06aM+ffq4ugwAAGBB/PVrAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZAABgWQQZWEZsbKwCAgJcXQYAwI0QZFAggwcPls1mk81mk7e3t+rWrasXX3xRf/75p8tqGjt2rFq0aHHNr9u/f7/jvVz6WLhwYfEXCgC4brxcXQCs44477tCcOXOUlZWlhIQERUREyGazaeLEia4u7ZrUqlVLSUlJTm3vvPOOXn/9dYWHh7uoKgBAYbBHBgVmt9tVrVo11apVS3379lX37t0VFxfnmJ6Tk6OJEyeqbt26Klu2rEJDQ7Vo0SLH9JMnT2rgwIEKDAxU2bJl1aBBA82ZM0eStGbNGtlsNqWmpjr6JyYmymazaf/+/XlqiY2NVXR0tH7++WfH3pTY2NgCvQ9PT09Vq1bN6bF48WL1799ffn5+hVo3AADXYI8MCmX79u367rvvVKdOHUfbZ599pp9++kkzZ85UgwYNtG7dOj3yyCMKDAxU586d9corr2jHjh1avny5qlSpoj179ujcuXOFWv6DDz6o7du3a8WKFfrmm28kSRUqVJB04TDY/v37tWbNmgLNKyEhQYmJiZo2bVqhagEAuA5BBgW2bNky+fn56fz588rIyJCHh4fefvttSVJGRoYWLVqkuLg4derUSZJUr149bdiwQbNmzVLnzp118OBBtWzZUm3atJEkhYSEFLqWsmXLys/PT15eXqpWrZrTtOrVqysnJ6fA83r//ffVuHFjdezYsdD1AABcw6VBZuzYsYqOjnZqa9iwoXbu3Omiiqzv/PlM/fz1V0o9dlQBQdUU2qu3vLx8imXeYWFhmjFjhs6ePat//etf8vLyUr9+/SRJe/bsUUZGRp5zTDIzM9WyZUtJ0lNPPaV+/fpp8+bN6tmzp/r27XtdwkNMTEyB+547d07z58/XK6+8Uux1AACuP5fvkWnatKnj0IAkeXm5vCTLWvvhbCUs+0LG/HdvxNp5s9W6T191fuTRIs+/XLlyuummmyRJs2fPVmhoqN5//3099thjOnv2rCRpyZIlToebpAvn1khSeHi4Dhw4oK+++kpxcXHq1q2bIiMj9cYbb8jD48LpWsYYx+uysrKKXPPVLFq0SOnp6Ro0aNB1XxYAoPi5PDXkd2gA127th7P109LP87Qbk+NoL44wk8vDw0Mvv/yyRo4cqYcffliNGzeWt7e3Dh48qG7dul32dYGBgYqIiFBERIQ6deqkF154QW+88YYCAwMlSUlJSapYsaKkCyf7XomPj4+ys7OL9D7ef/993X333Y7lAwCsxeVXLe3evVvBwcGqV6+eBg4cqIMHD7q6JMs5fz5TCcu+uGKfhH9/ofPnM4t1uQ888IA8PT01bdo0lS9fXn379tULL7yguXPnau/evdq8ebOmTp2quXPnSpJGjx6tJUuWaM+ePfrll1+0bNkyNW7cWJJ00003qVatWho7dqx2796tf//73/rnP/95xeWHhIRo3759SkxM1PHjx5WRkSFJioqKKtAelj179mjdunX661//WsQ1AQBwFZfukWnfvr1iY2PVsGFDJSUlKTo6Wp06ddL27dtVvnz5PP0zMjIcv6wk6dSpU5IuHIIoicMQ7mrL8mVOh5PyY3JytPmrZWoZflehlpGTk6OcnJw86/mpp57SpEmTFBERoYcfflht27bV+PHjtW/fPgUEBKhly5Z66aWXlJWVJU9PT40aNUoHDhxQ2bJldeutt2revHmOec6bN0/Dhw9X8+bN1aZNG40dO1YDBgxwjG/u3pfc/nfffbcWLVqksLAwpaam6r333tOgQYN0+PBhHThw4Ko/E++++65q1qypsLCwUvfzk/t+Stv7siLGwn0wFu6jOMfAZi4+KcHFUlNTVadOHb355pt67LHH8kzP7+RgSZo/f758fX1LokS3lBy/Uad277hqP/8GTVS17a0lUBEAAJeXnp6uhx9+WGlpafL39y/SvFx+jszFAgICdPPNN2vPnj35To+KitLIkSMdz0+dOqVatWopLCxMlStXLqky3c4WW7bWFyDIhLb7i1qG974uNWRlZSkuLk49evSQt7f3dVkGCo7xcB+MhftgLNxHSkpKsc3LrYLMmTNntHfvXv3P//xPvtPtdrvjCpiLeXt739A/lK1699GG+bFXPLxk8/BQq9595OV1fdfTjT4W7obxcB+MhftgLFyvONe/S0/2ff7557V27Vrt379f3333ne699155enpqwIABrizLcry8fNS6T98r9ml9Z99iu58MAADuwqV7ZH7//XcNGDBAKSkpCgwM1G233aZNmzZxKWwh5F5afel9ZGweHmp9Z/HcRwYAAHfj0iCzYMECVy6+1On8yKO69aFHrtudfQEAcDdudY4Mis7Ly0et7+zr6jIAACgRLr8hHgAAQGERZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGV5uboAFExOjlHS7lSdPZWhcv52VW8QIA8PW6H7AQBQGrhNkJkwYYKioqL07LPPavLkya4ux63s3ZKs9Z/s1tnUDEdbuQC7Oj3YQPVbVr3mfgAAlBZucWgpPj5es2bNUvPmzV1ditvZuyVZK2ZtdwonknQ2NUMrZm3X3i3J19QPAIDSxOVB5syZMxo4cKDeffddVaxY0dXluJWcHKP1n+y+Yp/1n+zWubNZWv/Jb1fst+HT3crJMcVZHgAALufyQ0uRkZG688471b17d7322mtX7JuRkaGMjP/ucTh16pQkKSsrS1lZWde1Tlc4sjs1zx6WS51NzdDsv62/6rzOnMzQoZ3HFdwgoJiqc5a7/kvjOFgR4+E+GAv3wVi4j+IcA5cGmQULFmjz5s2Kj48vUP+YmBhFR0fnaV+9erV8fX2LuzyXSz/iJalssc3vu7U/ynf3+WKbX37i4uKu6/xxbRgP98FYuA/GwvXS09OLbV4uCzKHDh3Ss88+q7i4OJUpU6ZAr4mKitLIkSMdz0+dOqVatWopLCxMlStXvl6lusyR3ala9vO2q/Zre1eI4pfuv2q/jp3bXdc9MnFxcerRo4e8vb2vyzJQcIyH+2As3Adj4T5SUlKKbV4uCzIJCQlKTk5Wq1atHG3Z2dlat26d3n77bWVkZMjT09PpNXa7XXa7Pc+8vL29S+UPZa1GVVQuwH7Fw0t+Fe1q1StEO9YnXbVfrUZVrvul2KV1LKyK8XAfjIX7YCxcrzjXv8tO9u3WrZu2bdumxMREx6NNmzYaOHCgEhMT84SYG5GHh02dHmxwxT639W8gLy+PAvXjfjIAgNLGZXtkypcvr2bNmjm1lStXTpUrV87TfiOr37Kq7niiWZ77w/hVtOu2/v+9P0xB+wEAUJq4/KolXF39llVVNzTwqnfsLWg/AABKC7cKMmvWrHF1CW7Lw8OmGg2vfp+dgvYDAKA0cPkN8QAAAAqLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyLIAMAACyr2IJMampqcc0KAACgQAoVZCZOnKhPPvnE8bx///6qXLmyatSooZ9//rnYigMAALiSQgWZmTNnqlatWpKkuLg4xcXFafny5QoPD9cLL7xQrAUCAABcjldhXnT06FFHkFm2bJn69++vnj17KiQkRO3bty/WAgEAAC6nUHtkKlasqEOHDkmSVqxYoe7du0uSjDHKzs4uvuoAAACuoFB7ZO677z49/PDDatCggVJSUhQeHi5J2rJli2666aZiLRAAAOByChVk/vWvfykkJESHDh3SpEmT5OfnJ0lKSkrSsGHDirVAAACAyylUkPH29tbzzz+fp/25554rckEAAAAFVaggI0m7du3S1KlT9euvv0qSGjdurKeffloNGzYstuIAAACupFAn+3722Wdq1qyZEhISFBoaqtDQUG3evFnNmjXTZ599Vtw1AgAA5KtQe2RefPFFRUVFady4cU7tY8aM0Ysvvqh+/foVS3EAAABXUqg9MklJSRo0aFCe9kceeURJSUlFLgoAAKAgCrVHpkuXLlq/fn2eS603bNigTp06FUthcGays5X+U4LO//GHvAID5dumtWyenq4u65qUhvcAAHAvhQoyd999t1566SUlJCToL3/5iyRp06ZN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L6hSpUqqWbOm5syZk2f+O3fuVMeOHVWmTBk1a9ZMa9eudZq+fft2hYeHy8/PT0FBQfqf//kfHT9+3DG9S5cuGj58uEaMGKEqVaqoV69ehVoXlx5astlseu+993TvvffK19dXDRo00JdffnlNtQEoOQQZ4Abk6emp8ePHa+rUqfr999+LNK9Vq1bpyJEjWrdund58802NGTNGffr0UcWKFfXDDz/oySef1BNPPJFnOS+88IL+9re/acuWLerQoYPuuusupaSkSJJSU1PVtWtXtWzZUj/99JNWrFihY8eOqX///k7zmDt3rnx8fLRx40bNnDmzSO/jYtHR0erfv7+2bt2q3r17a+DAgTpx4sQ11QagZBBkgBvUvffeqxYtWmjMmDFFmk+lSpU0ZcoUNWzYUI8++qgaNmyo9PR0vfzyy2rQoIGioqLk4+OjDRs2OL1u+PDh6tevnxo3bqwZM2aoQoUKev/99yVJb7/9tlq2bKnx48erUaNGatmypWbPnq3Vq1frt99+c8yjQYMGmjRpkho2bKiGDRsW6X1cbPDgwRowYIBuuukmjR8/XmfOnNGPP/54TbUBKBleri4AgOtMnDhRXbt21fPPP1/oeTRt2lQeHv/9ThQUFKRmzZo5nnt6eqpy5cpKTk52el2HDh0c//fy8lKbNm3066+/SpJ+/vlnrV69Wn5+fnmWt3fvXt18882SpNatWxe67itp3ry54//lypWTv7+/o/6C1gagZBBkgBvY7bffrl69eikqKkqDBw92mubh4SFjjFNbVlZWnnl4e3s7PbfZbPm25eTkFLiuM2fO6K677tLEiRPzTKtevbrj/+XKlSvwPK/FleovaG0ASgZBBrjBTZgwQS1atMhzaCYwMFBHjx6VMcZxWXZx3vtl06ZNuv322yVJ58+fV0JCgoYPHy5JatWqlT777DOFhITIy8u9PqbcuTbgRsQ5MsAN7pZbbtHAgQM1ZcoUp/YuXbrojz/+0KRJk7R3715NmzZNy5cvL7blTps2TYsXL9bOnTsVGRmpkydP6tFHH5UkRUZG6sSJExowYIDi4+O1d+9eff311xoyZIiys7OveVnnzp1TYmKi02Pv3r2Fqru4awNQNAQZABo3blyeQz+NGzfW9OnTNW3aNIWGhurHH38s0rk0l5owYYImTJig0NBQbdiwQV9++aWqVKkiSQoODtbGjRuVnZ2tnj176pZbbtGIESMUEBDgdD5OQf32229q2bKl0+OJJ54oVN3FXRuAorGZSw+CAwAAWARfHwAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGURZAAAgGX9H2yY02W9fezkAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#右边界可视化\n",
    "visualize_algorithm(50, record_algorithm)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
